# 编译器选择  := 立刻展开赋值
CXX := g++

# 编译选项 -Wall启用警告  -Wextra启用额外警告 -pedantic严格遵守标准  -O2优化级别，从O1到O3性能提高，安全降低  -std
CXXFLAGS := -Wall -Wextra -pedantic -O2 -std=c++17

# 定义编译目录
BUILD_DIR := build

# 目标可执行文件名称，依赖于其他变量的变量需要在其他变量之后定义！
TARGET := $(BUILD_DIR)/io_learn
# 源文件
SRC := io_learn.cpp

#默认目标 如果make不带任何参数就是执行make all
all: $(TARGET)
# 链接生成可执行文件  冒号:用于定义目标和依赖之间的关系
$(TARGET): $(SRC) | build
# 缩进是执行命令，通常是shell命令, 这里没有生成.o文件直接
	$(CXX) $(CXXFLAGS) -o $@ $^

$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

#清理生成的文件  make clean
clean: 
	rm -f $(TARGET) *.o

#声明伪目标: 伪目标用于保证  all  clean build下面的语句总是被执行
.PHONY: all clean build
